#include "script.h"
#include "keyboard.h"
#include <string>
#include <ctime>
#include "iostream"
#include "IniWriter.h"
#include "IniReader.h"

CIniReader reader(".\\OnlineEvents.ini");

#pragma warning(disable : 4244 4305) // double <-> float conversions

int min, baseMin, eventType;
int missionTime = 0;
int waitTime = 0;
bool makeEvent = false;
bool gotMin = false;
bool eventMade = false;
bool eventOver = false;
bool specialCrate = false;
int beep, missionEndTime, waitEndTime;
Ped playerPed;
Player player;

void NotifyAboveMap(char* Message)
{
	UI::_0x202709F4C58A0424("STRING");
	UI::_ADD_TEXT_COMPONENT_STRING(Message);
	UI::_0x2ED7843F8F801023(0, 1);
}

void NotifyBottomCenter(char* Message)
{
	UI::_0xB87A37EEB7FAA67D("STRING");
	UI::_ADD_TEXT_COMPONENT_STRING(Message);
	UI::_0x9D77056A530643F6(2000, 1);
}

void notificationBeep()
{
		AUDIO::PLAY_SOUND_FRONTEND(-1, "Text_Arrive_Tone", "Phone_SoundSet_Default", 0);
}

int model;
int val;

void money_math()
{
	if (PED::IS_PED_MODEL(playerPed, GAMEPLAY::GET_HASH_KEY("player_zero")))
	{
		model = 0;
	}
	if (PED::IS_PED_MODEL(playerPed, GAMEPLAY::GET_HASH_KEY("player_one")))
	{
		model = 1;
	}
	if (PED::IS_PED_MODEL(playerPed, GAMEPLAY::GET_HASH_KEY("player_two")))
	{
		model = 2;
	}

	char statNameFull[32];
	sprintf_s(statNameFull, "SP%d_TOTAL_CASH", model);
	Hash hash = GAMEPLAY::GET_HASH_KEY(statNameFull);
	STATS::STAT_GET_INT(hash, &val, -1);

	if (eventType == 1)
		val += 2000;
	if (eventType == 2)
		val += 1000;
	if (eventType == 3)
	{
		int random = rand() % 5 + 1;

		if (specialCrate)
		{
			if (random == 1)
			{
				val += 10000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_RPG"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$10000~w~\n- RPG");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 2)
			{
				val += 15000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_MINIGUN"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$15000~w~\n- Minigun");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 3)
			{
				val += 10000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_GRENADELAUNCHER"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$10000~w~\n- Grenade Launcher");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 4)
			{
				val += 15000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_STICKYBOMB"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$15000~w~\n- Sticky Bombs");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 5)
			{
				val += 20000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_MOLOTOV"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$20000~w~\n- Molotovs");
				if (beep == 1)
					notificationBeep();
			}
		}
		else
		{
			if (random == 1)
			{
				val += 1000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_HEAVYSNIPER"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$1000~w~\n- Heavy Sniper");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 2)
			{
				val += 1500;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_ASSAULTRIFLE"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$1500~w~\n- Assault Rifle");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 3)
			{
				val += 2000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_COMBATMG"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$2000~w~\n- Combat MG");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 4)
			{
				val += 2500;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_PUMPSHOTGUN"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$2500~w~\n- Pump Shotgun");
				if (beep == 1)
					notificationBeep();
			}
			if (random == 5)
			{
				val += 3000;
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(playerPed, GAMEPLAY::GET_HASH_KEY("WEAPON_APPISTOL"), 1000, 1);
				NotifyAboveMap("Crate collected.\nContents:\n- ~g~$3000~w~\n- AP Pistol");
				if (beep == 1)
					notificationBeep();
			}
		}
	}
	if (eventType == 4)
		val += 1500;

	STATS::STAT_SET_INT(hash, val, 1);
}

Vehicle collectionVehicle;
Blip vehicleBlip;

void vehicle_collection_spawn()
{
	Vector3 spawn;
	DWORD vehicle;
	float heading;

	while (true)
	{
		int random = rand() % 10 + 1;

		if (random == 1)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("rhapsody");
			spawn.x = 254.46f;
			spawn.y = 84.91f;
			spawn.z = 99.57f;
			heading = 250.01f;
		}
		if (random == 2)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("issi2");
			spawn.x = 710.79f;
			spawn.y = 601.97f;
			spawn.z = 128.58f;
			heading = 69.82f;
		}
		if (random == 3)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("pcj");
			spawn.x = 1136.90;
			spawn.y = 260.60f;
			spawn.z = 80.36f;
			heading = 98.78f;
		}
		if (random == 4)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("bifta");
			spawn.x = -2062.12f;
			spawn.y = -442.08f;
			spawn.z = 11.12f;
			heading = 138.29f;
		}
		if (random == 5)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("asterope");
			spawn.x = -1421.94f;
			spawn.y = -280.12f;
			spawn.z = 45.71f;
			heading = 41.50f;
		}
		if (random == 6)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("futo");
			spawn.x = -706.27f;
			spawn.y = -933.68f;
			spawn.z = 18.49f;
			heading = 359.21f;
		}
		if (random == 7)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("serrano");
			spawn.x = -5.11f;
			spawn.y = -1532.57f;
			spawn.z = 29.17f;
			heading = 186.52f;
		}
		if (random == 8)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("minivan");
			spawn.x = 984.24f;
			spawn.y = -1419.47f;
			spawn.z = 31.11f;
			heading = 268.95f;
		}
		if (random == 9)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("blista2");
			spawn.x = 1133.18f;
			spawn.y = -290.49f;
			spawn.z = 68.39f;
			heading = 279.95f;
		}
		if (random == 10)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("akuma");
			spawn.x = -1242.61f;
			spawn.y = -377.06f;
			spawn.z = 36.80f;
			heading = 120.14f;
		}

		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		int spawnDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(position.x, position.y, position.z, spawn.x, spawn.y, spawn.z, 0);

		if (spawnDistance > 1000)
			break;
	}

	STREAMING::REQUEST_MODEL(vehicle);
	while (!STREAMING::HAS_MODEL_LOADED(vehicle))
		WAIT(0);
	collectionVehicle = VEHICLE::CREATE_VEHICLE(vehicle, spawn.x, spawn.y, spawn.z, heading, 0, 0);
	VEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(collectionVehicle);
	vehicleBlip = UI::ADD_BLIP_FOR_ENTITY(collectionVehicle);
	if (VEHICLE::IS_THIS_MODEL_A_CAR(vehicle))
		UI::SET_BLIP_SPRITE(vehicleBlip, 225);
	else
		UI::SET_BLIP_SPRITE(vehicleBlip, 226);
	UI::SET_BLIP_COLOUR(vehicleBlip, 5);
	UI::SET_BLIP_DISPLAY(vehicleBlip, (char)"you will never see this");
	eventMade = true;
	eventType = 1;
	NotifyAboveMap("A ~y~special vehicle~w~ has been requested for pickup.");
	if (beep == 1)
		notificationBeep();
}

bool wantedSet = false;
bool gotColor = false;
bool resprayed = false;
bool blipMade = false;
int red1, green1, blue1;
int red2, green2, blue2;
int Sred1, Sgreen1, Sblue1;
int Sred2, Sgreen2, Sblue2;
int primary1, secondary1;
int primary2, secondary2;
int wanted;
Blip dropOff;

void vehicle_collection_mission()
{
	if (eventMade && eventType == 1)
	{
		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		Vector3 vehiclePos = ENTITY::GET_ENTITY_COORDS(collectionVehicle, 0);
		float dropOffDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(vehiclePos.x, vehiclePos.y, vehiclePos.z, 1226.06, -3231.36, 6.02, 0);
		int vehicleDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(vehiclePos.x, vehiclePos.y, vehiclePos.z, position.x, position.y, position.z, 0);

		if (PED::IS_PED_IN_VEHICLE(playerPed, collectionVehicle, 0) && !wantedSet)
		{
			wanted = PLAYER::GET_PLAYER_WANTED_LEVEL(player);
			if (wanted < 2)
			{
				PLAYER::SET_PLAYER_WANTED_LEVEL(player, 2, 0);
				PLAYER::SET_PLAYER_WANTED_LEVEL_NOW(player, 1);
			}
			wantedSet = true;
			NotifyAboveMap("Respray the vehicle before turning it in.");
			if (beep == 1)
				notificationBeep();
		}

		if (!gotColor)
		{
			VEHICLE::GET_VEHICLE_COLOURS(collectionVehicle, &primary1, &secondary1);
			gotColor = true;
		}

		VEHICLE::GET_VEHICLE_COLOURS(collectionVehicle, &primary2, &secondary2);
		VEHICLE::GET_VEHICLE_CUSTOM_PRIMARY_COLOUR(collectionVehicle, &red2, &green2, &blue2);
		if (VEHICLE::_DOES_VEHICLE_HAVE_SECONDARY_COLOUR(collectionVehicle))
			VEHICLE::GET_VEHICLE_CUSTOM_SECONDARY_COLOUR(collectionVehicle, &Sred2, &Sgreen2, &Sblue2);

		if (primary1 != primary2 && ENTITY::GET_ENTITY_SPEED(collectionVehicle) != 0 && !resprayed ||
			secondary1 != secondary2  && ENTITY::GET_ENTITY_SPEED(collectionVehicle) != 0 && !resprayed)
		{
			NotifyAboveMap("The vehicle is ready to be turned in to the ~y~garage~w~ at the docks.");
			if (beep == 1)
				notificationBeep();
			dropOff = UI::ADD_BLIP_FOR_COORD(1226.06f, -3231.36f, 6.02f);
			UI::SET_BLIP_SPRITE(dropOff, 50);
			UI::SET_BLIP_COLOUR(dropOff, 5);
			UI::SET_BLIP_DISPLAY(dropOff, (char)"you will never see this");
			resprayed = true;
		}

		if (resprayed && eventMade)
		{
			GRAPHICS::DRAW_MARKER(1, 1226.06, -3231.36, 4.9, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 5.0f, 5.0f, 1.0f, 204, 204, 0, 100, false, false, 2, false, false, false, false);
		}

		if (dropOffDistance < 0.7f && PED::IS_PED_IN_VEHICLE(playerPed, collectionVehicle, 0) && resprayed && eventMade)
		{
			VEHICLE::SET_VEHICLE_FORWARD_SPEED(collectionVehicle, 0.0f);
			while (ENTITY::GET_ENTITY_SPEED(collectionVehicle) != 0)
				WAIT(0);
			AI::TASK_LEAVE_VEHICLE(playerPed, collectionVehicle, 0);
			VEHICLE::SET_VEHICLE_UNDRIVEABLE(collectionVehicle, 1);
			NotifyAboveMap("Vehicle collected.\nReward: ~g~$2000~w~");
			if (beep == 1)
				notificationBeep();
			money_math();
			UI::REMOVE_BLIP(&dropOff);
			UI::REMOVE_BLIP(&vehicleBlip);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&collectionVehicle);
			eventMade = false;
			wantedSet = false;
			gotColor = false;
			resprayed = false;
			blipMade = false;
			eventOver = false;
			missionTime = 0;
		}

		if (!VEHICLE::IS_VEHICLE_DRIVEABLE(collectionVehicle, 1) && eventMade)
		{
			NotifyAboveMap("The ~y~special vehicle~w~ has been destroyed.");
			if (beep == 1)
				notificationBeep();

			if (resprayed)
				UI::REMOVE_BLIP(&dropOff);

			UI::REMOVE_BLIP(&vehicleBlip);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&collectionVehicle);
			eventMade = false;
			wantedSet = false;
			gotColor = false;
			resprayed = false;
			blipMade = false;
			eventOver = false;
			missionTime = 0;
		}

		if (eventOver && vehicleDistance > 1000 || eventMade && ENTITY::IS_ENTITY_DEAD(playerPed))
		{
			NotifyAboveMap("The ~y~special vehicle~w~ is no longer requested.");
			if (beep == 1)
				notificationBeep();

			if (resprayed)
				UI::REMOVE_BLIP(&dropOff);

			UI::REMOVE_BLIP(&vehicleBlip);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&collectionVehicle);
			eventMade = false;
			wantedSet = false;
			gotColor = false;
			resprayed = false;
			blipMade = false;
			eventOver = false;
			missionTime = 0;
		}
	}
}

Vehicle smugglerVehicle;
Blip smugglerBlip;

void arms_smuggler_spawn()
{
	Vector3 spawn;
	DWORD vehicle;
	float heading;

	while (true)
	{
		int random = rand() % 10 + 1;

		if (random == 1)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("rebel");
			spawn.x = 632.31f;
			spawn.y = 2807.72f;
			spawn.z = 41.59f;
			heading = 274.60f;
		}
		if (random == 2)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("rancherxl");
			spawn.x = -2088.22f;
			spawn.y = 2645.72f;
			spawn.z = 2.49f;
			heading = 49.00f;
		}
		if (random == 3)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("dloader");
			spawn.x = 1520.75f;
			spawn.y = 6504.73f;
			spawn.z = 21.67f;
			heading = 68.38f;
		}
		if (random == 4)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("voodoo2");
			spawn.x = 2008.36f;
			spawn.y = 4968.20f;
			spawn.z = 41.13f;
			heading = 276.87f;
		}
		if (random == 5)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("bfinjection");
			spawn.x = -393.68f;
			spawn.y = 6375.97f;
			spawn.z = 13.47f;
			heading = 23.84f;
		}
		if (random == 6)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("sanchez2");
			spawn.x = 335.60f;
			spawn.y = 4468.75f;
			spawn.z = 62.75f;
			heading = 13.05f;
		}
		if (random == 7)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("hexer");
			spawn.x = -194.96f;
			spawn.y = 3652.16f;
			spawn.z = 51.21f;
			heading = 244.75f;
		}
		if (random == 8)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("daemon");
			spawn.x = 2657.63f;
			spawn.y = 3509.00f;
			spawn.z = 52.86f;
			heading = 340.33f;
		}
		if (random == 9)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("journey");
			spawn.x = 2185.36f;
			spawn.y = 5558.47f;
			spawn.z = 53.15f;
			heading = 215.16f;
		}
		if (random == 10)
		{
			vehicle = GAMEPLAY::GET_HASH_KEY("sadler");
			spawn.x = 181.71f;
			spawn.y = 2228.65f;
			spawn.z = 89.55f;
			heading = 233.02f;
		}

		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		int spawnDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(position.x, position.y, position.z, spawn.x, spawn.y, spawn.z, 0);

		if (spawnDistance > 1000)
			break;
	}

	STREAMING::REQUEST_MODEL(vehicle);
	while (!STREAMING::HAS_MODEL_LOADED(vehicle))
		WAIT(0);
	smugglerVehicle = VEHICLE::CREATE_VEHICLE(vehicle, spawn.x, spawn.y, spawn.z, heading, 0, 0);
	VEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(smugglerVehicle);
	smugglerBlip = UI::ADD_BLIP_FOR_ENTITY(smugglerVehicle);
	if (VEHICLE::IS_THIS_MODEL_A_CAR(vehicle))
		UI::SET_BLIP_SPRITE(smugglerBlip, 225);
	else
		UI::SET_BLIP_SPRITE(smugglerBlip, 226);
	UI::SET_BLIP_COLOUR(smugglerBlip, 1);
	UI::SET_BLIP_DISPLAY(smugglerBlip, (char)"you will never see this");
	eventMade = true;
	eventType = 2;
	NotifyAboveMap("A ~r~smuggler vehicle~w~ has been spotted.  Destroy it for a reward.");
	if (beep == 1)
		notificationBeep();
}

void arms_smuggler_mission()
{
	if (eventMade && eventType == 2)
	{
		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		Vector3 vehiclePos = ENTITY::GET_ENTITY_COORDS(smugglerVehicle, 0);
		int vehicleDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(vehiclePos.x, vehiclePos.y, vehiclePos.z, position.x, position.y, position.z, 0);

		if (!VEHICLE::IS_VEHICLE_DRIVEABLE(smugglerVehicle, 1) && eventMade)
		{
			money_math();
			UI::REMOVE_BLIP(&smugglerBlip);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&smugglerVehicle);
			NotifyAboveMap("Vehicle destroyed.\nReward: ~g~$1000~w~");
			if (beep == 1)
				notificationBeep();
			eventMade = false;
			eventOver = false;
			missionTime = 0;
		}

		if (eventOver && vehicleDistance > 1000 || eventMade && ENTITY::IS_ENTITY_DEAD(playerPed))
		{
			NotifyAboveMap("The ~r~smuggler vehicle~w~ has been claimed by smugglers.");
			if (beep == 1)
				notificationBeep();
			UI::REMOVE_BLIP(&smugglerBlip);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&smugglerVehicle);
			eventMade = false;
			eventOver = false;
			missionTime = 0;
		}
	}
}

Blip crateBlip;
Vector3 crateSpawn;

void crate_drop_spawn()
{
	while (true)
	{
		int random = rand() % 10 + 1;

		if (random == 1)
		{
			crateSpawn.x = -1782.33f;
			crateSpawn.y = -826.29f;
			crateSpawn.z = 7.83f;
		}
		if (random == 2)
		{
			crateSpawn.x = 1067.85f;
			crateSpawn.y = 2362.45f;
			crateSpawn.z = 43.87f;
		}
		if (random == 3)
		{
			crateSpawn.x = -3.77f;
			crateSpawn.y = 6840.14f;
			crateSpawn.z = 13.46f;
		}
		if (random == 4)
		{
			crateSpawn.x = 2061.37f;
			crateSpawn.y = 2798.68f;
			crateSpawn.z = 50.29f;
		}
		if (random == 5)
		{
			crateSpawn.x = 1883.24f;
			crateSpawn.y = 278.48f;
			crateSpawn.z = 162.73f;
		}
		if (random == 6)
		{
			crateSpawn.x = -2912.36f;
			crateSpawn.y = 3077.48f;
			crateSpawn.z = 3.39f;
		}
		if (random == 7)
		{
			crateSpawn.x = 2822.70f;
			crateSpawn.y = -634.39f;
			crateSpawn.z = 2.15f;
		}
		if (random == 8)
		{
			crateSpawn.x = 2184.12f;
			crateSpawn.y = 5026.09f;
			crateSpawn.z = 42.63f;
		}
		if (random == 9)
		{
			crateSpawn.x = -3147.02f;
			crateSpawn.y = 305.27f;
			crateSpawn.z = 2.35f;
		}
		if (random == 10)
		{
			crateSpawn.x = 1552.40f;
			crateSpawn.y = 6644.04f;
			crateSpawn.z = 2.55f;
		}

		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		int spawnDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(position.x, position.y, position.z, crateSpawn.x, crateSpawn.y, crateSpawn.z, 0);

		if (spawnDistance > 1000)
			break;
	}

	int random = rand() % 25 + 1;

	if (random == 20)
		specialCrate = true;
	crateBlip = UI::ADD_BLIP_FOR_COORD(crateSpawn.x, crateSpawn.y, crateSpawn.z);
	UI::SET_BLIP_SPRITE(crateBlip, 306);
	UI::SET_BLIP_SCALE(crateBlip, 1.5);
	if (specialCrate)
		UI::SET_BLIP_COLOUR(crateBlip, 5);
	if (!specialCrate)
		UI::SET_BLIP_COLOUR(crateBlip, 2);
	UI::SET_BLIP_DISPLAY(crateBlip, (char)"you will never see this");
	if (specialCrate)
		NotifyAboveMap("A ~y~special crate~w~ has been dropped.");
	if (!specialCrate)
		NotifyAboveMap("A ~g~crate~w~ has been dropped.");
	if (beep == 1)
		notificationBeep();
	eventMade = true;
	eventType = 3;
}

bool crateMade = false;
bool spawnGaurds = false;
Object crate;
Ped gaurd1, gaurd2, gaurd3, gaurd4, gaurd5, gaurd6, gaurd7, gaurd8, gaurd9, gaurd10;

void crate_drop_mission()
{
	if (eventMade && eventType == 3)
	{
		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		int spawnDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(position.x, position.y, position.z, crateSpawn.x, crateSpawn.y, crateSpawn.z, 0);

		if (spawnDistance < 300 && !crateMade)
		{
			STREAMING::REQUEST_MODEL(GAMEPLAY::GET_HASH_KEY("prop_box_ammo04a"));
			while (!STREAMING::HAS_MODEL_LOADED(GAMEPLAY::GET_HASH_KEY("prop_box_ammo04a")))
				WAIT(0);
			crate = OBJECT::CREATE_AMBIENT_PICKUP(0x14568F28, crateSpawn.x, crateSpawn.y, crateSpawn.z, -1, 0, GAMEPLAY::GET_HASH_KEY("prop_box_ammo04a"), 1, 1);
			ENTITY::SET_ENTITY_ALPHA(crate, 255, 1);
			while (ENTITY::GET_ENTITY_HEIGHT(crate, crateSpawn.x, crateSpawn.y, crateSpawn.z, 1, 1) > 0)
				OBJECT::PLACE_OBJECT_ON_GROUND_PROPERLY(crate);
			ENTITY::FREEZE_ENTITY_POSITION(crate, 1);
			UI::REMOVE_BLIP(&crateBlip);
			crateBlip = UI::ADD_BLIP_FOR_ENTITY(crate);
			UI::SET_BLIP_SPRITE(crateBlip, 306);
			UI::SET_BLIP_SCALE(crateBlip, 1.5);
			if (specialCrate)
				UI::SET_BLIP_COLOUR(crateBlip, 5);
			if (!specialCrate)
				UI::SET_BLIP_COLOUR(crateBlip, 2);
			UI::SET_BLIP_DISPLAY(crateBlip, (char)"you will never see this");
			crateMade = true;
			spawnGaurds = true;
		}

		if (crateMade && spawnGaurds)
		{
			Ped skin = GAMEPLAY::GET_HASH_KEY("mp_g_m_pros_01");
			STREAMING::REQUEST_MODEL(skin);

			if (!ENTITY::DOES_ENTITY_EXIST(gaurd1))
			{
				gaurd1 = PED::CREATE_PED(26, skin, crateSpawn.x + 3, crateSpawn.y, crateSpawn.z + 3, 20, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd1, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd1, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd1, GAMEPLAY::GET_HASH_KEY("WEAPON_PUMPSHOTGUN"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd1, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd2))
			{
				gaurd2 = PED::CREATE_PED(26, skin, crateSpawn.x, crateSpawn.y + 3, crateSpawn.z + 3, 40, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd2, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd2, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd2, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd3))
			{
				gaurd3 = PED::CREATE_PED(26, skin, crateSpawn.x + 3, crateSpawn.y + 3, crateSpawn.z + 3, 60, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd3, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd3, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd3, GAMEPLAY::GET_HASH_KEY("WEAPON_PUMPSHOTGUN"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd3, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd4))
			{
				gaurd4 = PED::CREATE_PED(26, skin, crateSpawn.x - 3, crateSpawn.y, crateSpawn.z + 3, 80, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd4, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd4, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd4, GAMEPLAY::GET_HASH_KEY("WEAPON_ASSAULTRIFLE"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd4, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd5))
			{
				gaurd5 = PED::CREATE_PED(26, skin, crateSpawn.x, crateSpawn.y - 3, crateSpawn.z + 3, 100, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd5, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd5, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd5, GAMEPLAY::GET_HASH_KEY("WEAPON_PUMPSHOTGUN"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd5, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd6))
			{
				gaurd6 = PED::CREATE_PED(26, skin, crateSpawn.x - 3, crateSpawn.y - 3, crateSpawn.z + 3, 120, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd6, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd6, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd6, GAMEPLAY::GET_HASH_KEY("WEAPON_ASSAULTRIFLE"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd6, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd7))
			{
				gaurd7 = PED::CREATE_PED(26, skin, crateSpawn.x + 5, crateSpawn.y, crateSpawn.z + 3, 140, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd7, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd7, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd7, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd8))
			{
				gaurd8 = PED::CREATE_PED(26, skin, crateSpawn.x, crateSpawn.y + 5, crateSpawn.z + 3, 160, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd8, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd8, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd8, GAMEPLAY::GET_HASH_KEY("WEAPON_ASSAULTRIFLE"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd8, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd9))
			{
				gaurd9 = PED::CREATE_PED(26, skin, crateSpawn.x - 5, crateSpawn.y, crateSpawn.z + 3, 180, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd9, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd9, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd9, GAMEPLAY::GET_HASH_KEY("WEAPON_PUMPSHOTGUN"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd9, false);
			}
			if (!ENTITY::DOES_ENTITY_EXIST(gaurd10))
			{
				gaurd10 = PED::CREATE_PED(26, skin, crateSpawn.x, crateSpawn.y - 5, crateSpawn.z + 3, 200, false, true);
				PED::SET_PED_RELATIONSHIP_GROUP_HASH(gaurd10, GAMEPLAY::GET_HASH_KEY("HATES_PLAYER"));
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd10, GAMEPLAY::GET_HASH_KEY("WEAPON_PISTOL"), 1000, 1);
				WEAPON::GIVE_DELAYED_WEAPON_TO_PED(gaurd10, GAMEPLAY::GET_HASH_KEY("WEAPON_ASSAULTRIFLE"), 1000, 1);
				ENTITY::SET_ENTITY_INVINCIBLE(gaurd10, false);
			}

			if (ENTITY::DOES_ENTITY_EXIST(gaurd1) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd2) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd3) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd4) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd5) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd6) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd7) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd8) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd9) &&
				ENTITY::DOES_ENTITY_EXIST(gaurd10))
			{
				spawnGaurds = false;
			}

		}

		if (eventMade && crateMade && !ENTITY::DOES_ENTITY_EXIST(crate))
		{
			money_math();
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd1);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd2);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd3);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd4);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd5);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd6);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd7);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd8);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd9);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd10);
			specialCrate = false;
			eventMade = false;
			eventOver = false;
			crateMade = false;
			missionTime = 0;
		}

		if (eventOver && spawnDistance > 1000 || eventMade && ENTITY::IS_ENTITY_DEAD(playerPed))
		{
			if (specialCrate)
				NotifyAboveMap("The ~y~special crate~w~ has been claimed by smugglers.");
			if (!specialCrate)
				NotifyAboveMap("The ~g~crate~w~ has been claimed by smugglers.");
			if (beep == 1)
				notificationBeep();
			UI::REMOVE_BLIP(&crateBlip);
			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&crate);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd1);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd2);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd3);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd4);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd5);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd6);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd7);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd8);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd9);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&gaurd10);
			specialCrate = false;
			eventMade = false;
			eventOver = false;
			crateMade = false;
			missionTime = 0;
		}
	}
}

Ped target;
Blip targetBlip;

void assassination_spawn()
{
	Vector3 spawn;
	float heading;

	while (true)
	{
		int random = rand() % 10 + 1;

		if (random == 1)
		{
			spawn.x = 145.13f;
			spawn.y = 189.83f;
			spawn.z = 106.39f;
			heading = 289.36f;
		}
		if (random == 2)
		{
			spawn.x = 499.06f;
			spawn.y = -236.07f;
			spawn.z = 48.71f;
			heading = 209.44f;
		}
		if (random == 3)
		{
			spawn.x = 91.20f;
			spawn.y = -1436.35f;
			spawn.z = 29.30f;
			heading = 146.08f;
		}
		if (random == 4)
		{
			spawn.x = -1177.02f;
			spawn.y = -1404.81f;
			spawn.z = 4.65f;
			heading = 281.10f;
		}
		if (random == 5)
		{
			spawn.x = -1845.61f;
			spawn.y = -1213.09f;
			spawn.z = 13.01f;
			heading = 200.24f;
		}
		if (random == 6)
		{
			spawn.x = -1350.38f;
			spawn.y = -78.39f;
			spawn.z = 50.82f;
			heading = 276.20f;
		}
		if (random == 7)
		{
			spawn.x = -543.53f;
			spawn.y = -42.11f;
			spawn.z = 42.88f;
			heading = 56.28f;
		}
		if (random == 8)
		{
			spawn.x = 215.99f;
			spawn.y = -870.98f;
			spawn.z = 30.49f;
			heading = 300.32f;
		}
		if (random == 9)
		{
			spawn.x = 1066.14f;
			spawn.y = -608.32f;
			spawn.z = 56.83f;
			heading = 160.16f;
		}
		if (random == 10)
		{
			spawn.x = 335.83f;
			spawn.y = -1969.57f;
			spawn.z = 24.36f;
			heading = 61.14f;
		}

		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		int spawnDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(position.x, position.y, position.z, spawn.x, spawn.y, spawn.z, 0);

		if (spawnDistance > 1000)
			break;
	}

	target = PED::CREATE_RANDOM_PED(spawn.x, spawn.y, spawn.z);
	while (!ENTITY::DOES_ENTITY_EXIST(target))
		WAIT(0);
	PED::SET_PED_DESIRED_HEADING(target, heading);
	targetBlip = UI::ADD_BLIP_FOR_ENTITY(target);
	AI::TASK_WANDER_STANDARD(target, 1000.0f, 0);
	UI::SET_BLIP_SPRITE(targetBlip, 432);
	UI::SET_BLIP_COLOUR(targetBlip, 1);
	UI::SET_BLIP_DISPLAY(targetBlip, (char)"you will never see this");
	eventMade = true;
	eventType = 4;
	NotifyAboveMap("A hit has been placed on a ~r~target~w~.  Kill them for a reward.");
	if (beep == 1)
		notificationBeep();
}

void assassination_mission()
{
	if (eventMade && eventType == 4)
	{
		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		Vector3 targetPos = ENTITY::GET_ENTITY_COORDS(target, 0);
		int targetDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(targetPos.x, targetPos.y, targetPos.z, position.x, position.y, position.z, 0);

		if (ENTITY::IS_ENTITY_DEAD(target) && eventMade)
		{
			money_math();
			UI::REMOVE_BLIP(&targetBlip);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&target);
			NotifyAboveMap("Target killed.\nReward: ~g~$1500~w~");
			if (beep == 1)
				notificationBeep();
			eventMade = false;
			eventOver = false;
			missionTime = 0;
		}

		if (eventOver && targetDistance > 1000 || eventMade && ENTITY::IS_ENTITY_DEAD(playerPed))
		{
			NotifyAboveMap("The hit on the ~r~target~w~ has expired.");
			if (beep == 1)
				notificationBeep();
			UI::REMOVE_BLIP(&targetBlip);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&target);
			eventMade = false;
			eventOver = false;
			missionTime = 0;
		}
	}
}

Vehicle truck;
Blip truckBlip;

void armored_truck_spawn()
{
	Vector3 spawn;
	float heading;

	while (true)
	{
		int random = rand() % 10 + 1;

		if (random == 1)
		{
			spawn.x = 206.62f;
			spawn.y = -40.01f;
			spawn.z = 68.49f;
			heading = 144.72f;
		}
		if (random == 2)
		{
			spawn.x = -273.17f;
			spawn.y = -883.21f;
			spawn.z = 30.82f;
			heading = 339.09f;
		}
		if (random == 3)
		{
			spawn.x = -46.17f;
			spawn.y = -1739.08f;
			spawn.z = 28.82f;
			heading = 51.90f;
		}
		if (random == 4)
		{
			spawn.x = -1887.05f;
			spawn.y = -359.63f;
			spawn.z = 48.79f;
			heading = 139.09f;
		}
		if (random == 5)
		{
			spawn.x = 881.33f;
			spawn.y = 22.07f;
			spawn.z = 78.31f;
			heading = 51.88f;
		}
		if (random == 6)
		{
			spawn.x = 1189.92f;
			spawn.y = -1415.68f;
			spawn.z = 34.73f;
			heading = 182.73f;
		}
		if (random == 7)
		{
			spawn.x = -1065.47f;
			spawn.y = -1391.93f;
			spawn.z = 4.77f;
			heading = 82.02f;
		}
		if (random == 8)
		{
			spawn.x = 365.46f;
			spawn.y = -835.60f;
			spawn.z = 28.89f;
			heading = 180.54f;
		}
		if (random == 9)
		{
			spawn.x = -150.84f;
			spawn.y = 6491.31f;
			spawn.z = 29.29f;
			heading = 44.16f;
		}
		if (random == 10)
		{
			spawn.x = 1317.85f;
			spawn.y = 6506.17f;
			spawn.z = 19.66f;
			heading = 98.89f;
		}

		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		int spawnDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(position.x, position.y, position.z, spawn.x, spawn.y, spawn.z, 0);

		if (spawnDistance > 1000)
			break;
	}

	STREAMING::REQUEST_MODEL(GAMEPLAY::GET_HASH_KEY("stockade"));
	while (!STREAMING::HAS_MODEL_LOADED(GAMEPLAY::GET_HASH_KEY("stockade")))
		WAIT(0);
	truck = VEHICLE::CREATE_VEHICLE(GAMEPLAY::GET_HASH_KEY("stockade"), spawn.x, spawn.y, spawn.z, heading, 0, 0);
	VEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(truck);
	truckBlip = UI::ADD_BLIP_FOR_ENTITY(truck);
	UI::SET_BLIP_SPRITE(truckBlip, 67);
	UI::SET_BLIP_COLOUR(truckBlip, 3);
	UI::SET_BLIP_DISPLAY(truckBlip, (char)"you will never see this");
	eventMade = true;
	eventType = 5;
	NotifyAboveMap("An ~b~armored truck~w~ has been spotted carrying cash.");
	if (beep == 1)
		notificationBeep();
}

Object case1, case2, case3;
Vector3 truckPos;
Ped driver;
bool driverMade = false;

void armored_truck_mission()
{
	if (eventMade && eventType == 5)
	{
		Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 0);
		truckPos = ENTITY::GET_ENTITY_COORDS(truck, 0);
		int truckDistance = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(truckPos.x, truckPos.y, truckPos.z, position.x, position.y, position.z, 0);

		if (!driverMade)
		{
			Ped skin = GAMEPLAY::GET_HASH_KEY("mp_s_m_armoured_01");
			STREAMING::REQUEST_MODEL(skin);
			driver = PED::CREATE_PED_INSIDE_VEHICLE(truck, 26, skin, -1, false, false);
			if (ENTITY::DOES_ENTITY_EXIST(driver))
			{
				AI::TASK_VEHICLE_DRIVE_WANDER(driver, truck, 10.0f, 153);
				driverMade = true;
			}
		}

		if (VEHICLE::IS_VEHICLE_DOOR_FULLY_OPEN(truck, 2) && eventMade || VEHICLE::IS_VEHICLE_DOOR_FULLY_OPEN(truck, 3) && eventMade)
		{
			int random = rand() % 3 + 1;

			if (random == 1)
				case1 = OBJECT::CREATE_AMBIENT_PICKUP(0xDE78F17E, truckPos.x, truckPos.y, truckPos.z + 1, -1, 1000, 0, 1, 1);
			if (random == 2)
			{
				case1 = OBJECT::CREATE_AMBIENT_PICKUP(0xDE78F17E, truckPos.x, truckPos.y, truckPos.z + 1, -1, 1000, 0, 1, 1);
				case2 = OBJECT::CREATE_AMBIENT_PICKUP(0xDE78F17E, truckPos.x, truckPos.y, truckPos.z + 1, -1, 1250, 0, 1, 1);
			}
			if (random == 3)
			{
				case1 = OBJECT::CREATE_AMBIENT_PICKUP(0xDE78F17E, truckPos.x, truckPos.y, truckPos.z + 1, -1, 1000, 0, 1, 1);
				case2 = OBJECT::CREATE_AMBIENT_PICKUP(0xDE78F17E, truckPos.x, truckPos.y, truckPos.z + 1, -1, 2000, 0, 1, 1);
				case3 = OBJECT::CREATE_AMBIENT_PICKUP(0xDE78F17E, truckPos.x, truckPos.y, truckPos.z + 1, -1, 1500, 0, 1, 1);
			}

			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&case1);
			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&case1);
			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&case1);

			NotifyAboveMap("The ~b~armored truck's~w~ doors have opened.  Cash has been dropped.");
			if (beep == 1)
				notificationBeep();
			wanted = PLAYER::GET_PLAYER_WANTED_LEVEL(player);
			if (wanted < 3)
			{
				PLAYER::SET_PLAYER_WANTED_LEVEL(player, 3, 0);
				PLAYER::SET_PLAYER_WANTED_LEVEL_NOW(player, 1);
			}
			UI::REMOVE_BLIP(&truckBlip);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&driver);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&truck);
			eventMade = false;
			eventOver = false;
			driverMade = false;
			missionTime = 0;
		}

		if (eventOver && truckDistance > 1000 || eventMade && ENTITY::IS_ENTITY_DEAD(playerPed))
		{
			NotifyAboveMap("The ~b~armored truck~w~ has finished carrying cash.");
			if (beep == 1)
				notificationBeep();
			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&case1);
			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&case1);
			ENTITY::SET_OBJECT_AS_NO_LONGER_NEEDED(&case1);
			UI::REMOVE_BLIP(&truckBlip);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&driver);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&truck);
			eventMade = false;
			eventOver = false;
			driverMade = false;
			missionTime = 0;
		}

		if (!VEHICLE::IS_VEHICLE_DRIVEABLE(truck, 1) && eventMade)
		{
			NotifyAboveMap("The ~b~armored truck~w~ has been destroyed.  The cash cases inside have been ruined.");
			if (beep == 1)
				notificationBeep();
			UI::REMOVE_BLIP(&truckBlip);
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&driver);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&truck);
			eventMade = false;
			eventOver = false;
			driverMade = false;
			missionTime = 0;
		}
	}
}

void update()
{
	playerPed = PLAYER::PLAYER_PED_ID();
	player = PLAYER::PLAYER_ID();

	if (gotMin == false)
	{
		baseMin = TIME::GET_CLOCK_MINUTES();
		gotMin = true;
	}

	min = TIME::GET_CLOCK_MINUTES();

	if (min != baseMin)
	{
		if (!eventMade)
		{
			if (makeEvent)
			{
				int random = rand() % 5;

				if (random == 0)
				{
					arms_smuggler_spawn();
				}
				if (random == 1)
				{
					vehicle_collection_spawn();
				}
				if (random == 2)
				{
					crate_drop_spawn();
				}
				if (random == 3)
				{
					assassination_spawn();
				}
				if (random == 4)
				{
					armored_truck_spawn();
				}
				makeEvent = false;
				waitTime = 0;
			}
			else
			{
				waitTime += 1;
				if (waitTime == waitEndTime)
					makeEvent = true;
			}
		}

		if (eventMade)
		{
			missionTime += 1;
			if (missionTime == missionEndTime)
				eventOver = true;
		}
		gotMin = false;
	}
}

void main()
{
	beep = reader.ReadInteger("Options", "BeepEnabled", 1);
	missionEndTime = reader.ReadInteger("Options", "MissionTime", 210);
	waitEndTime = reader.ReadInteger("Options", "WaitTime", 150);

	while (true)
	{
		vehicle_collection_mission();
		arms_smuggler_mission();
		crate_drop_mission();
		assassination_mission();
		armored_truck_mission();
		update();
		WAIT(0);
	}
}

void ScriptMain()
{
	srand(GetTickCount());
	main();
}
